home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / getrusage.c < prev    next >
C/C++ Source or Header  |  1988-06-19  |  3KB  |  95 lines

  1. /* 
  2.  * getrusage.c --
  3.  *
  4.  *    Procedure to map from Unix getrusage system call to Sprite.
  5.  *
  6.  * Copyright (C) 1986 Regents of the University of California
  7.  * All rights reserved.
  8.  */
  9.  
  10. #ifndef lint
  11. static char rcsid[] = "$Header: getrusage.c,v 1.1 88/06/19 14:31:28 ouster Exp $ SPRITE (Berkeley)";
  12. #endif not lint
  13.  
  14. #include "sprite.h"
  15. #include "proc.h"
  16.  
  17. #include <sys/time.h>
  18. #include <sys/resource.h>
  19.  
  20. #include "compatInt.h"
  21.  
  22. /*
  23.  * Convert from a Sprite Time to a Unix struct timeval.  The structures
  24.  * really are compatible, but C won't permit a cast from one to the other,
  25.  * so use a macro instead.
  26.  */
  27.  
  28. #define COPYTIME(TO,FROM) { \
  29.         (TO).tv_sec = (FROM).seconds; \
  30.         (TO).tv_usec = (FROM).microseconds; \
  31.       }
  32.  
  33.  
  34. /*
  35.  *----------------------------------------------------------------------
  36.  *
  37.  * getrusage --
  38.  *
  39.  *    Procedure to map from Unix getrusage system call to Sprite
  40.  *    Proc_GetResUsage.  Note that getrusage normally returns more
  41.  *    information than Proc_GetResUsage, so many fields must be set
  42.  *    to zero.
  43.  *
  44.  * Results:
  45.  *    UNIX_ERROR is returned upon error, with the actual error code
  46.  *    stored in errno.  Upon success, UNIX_SUCCESS is returned and the
  47.  *    rusage struct is filled with the available information.
  48.  *
  49.  * Side effects:
  50.  *    None.
  51.  *
  52.  *----------------------------------------------------------------------
  53.  */
  54.  
  55. int
  56. getrusage(who, rusage)
  57.      int who;
  58.      struct rusage *rusage;
  59. {
  60.     ReturnStatus status;        /* result returned by Proc_GetResUsage */
  61.     Proc_ResUsage spriteUsage;         /* sprite resource usage buffer */
  62.  
  63.     status = Proc_GetResUsage(PROC_MY_PID, &spriteUsage);
  64.     if (status != SUCCESS) {
  65.     errno = Compat_MapCode(status);
  66.     return(UNIX_ERROR);
  67.     } else {
  68.     if (who == RUSAGE_SELF) {
  69.         COPYTIME(rusage->ru_utime, spriteUsage.userCpuUsage);
  70.         COPYTIME(rusage->ru_stime, spriteUsage.kernelCpuUsage);
  71.     } else {
  72.         COPYTIME(rusage->ru_utime, spriteUsage.childUserCpuUsage);
  73.         COPYTIME(rusage->ru_stime, spriteUsage.childKernelCpuUsage);
  74.     }
  75.     rusage->ru_maxrss = 0;
  76.     rusage->ru_ixrss = 0;    /* integral shared memory size */
  77.     rusage->ru_idrss = 0;    /* integral unshared data size */
  78.     rusage->ru_isrss = 0;    /* integral unshared stack size */
  79.     rusage->ru_minflt = 0;    /* page reclaims */
  80.     rusage->ru_majflt = 0;    /* page faults */
  81.     rusage->ru_nswap = 0;    /* swaps */
  82.     rusage->ru_inblock = 0;    /* block input operations */
  83.     rusage->ru_oublock = 0;    /* block output operations */
  84.     rusage->ru_msgsnd = 0;    /* messages sent */
  85.     rusage->ru_msgrcv = 0;    /* messages received */
  86.     rusage->ru_nsignals = 0;    /* signals received */
  87.     rusage->ru_nvcsw =
  88.             spriteUsage.numWaitEvents;  /* voluntary context switches */
  89.     rusage->ru_nivcsw =
  90.             spriteUsage.numQuantumEnds;  /* involuntary context switches */
  91.  
  92.     return(UNIX_SUCCESS);
  93.     }
  94. }
  95.